/*
 * Copyright (c) 2018-2021, NVIDIA CORPORATION.  All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * SPDX-FileCopyrightText: Copyright (c) 2018-2021 NVIDIA CORPORATION
 * SPDX-License-Identifier: Apache-2.0
 */


//////////////////////////////////////////////////////////////////////////
/** @DOC_START
## `nvvk::make`
  
  Contains templated `nvvk::make<T>` function that is 
  auto-generated by `structs.lua`. The function provide default 
  structs for the Vulkan C api by initializing the `VkStructureType sType`
  field (also for nested structs) and clearing the rest to zero.

  ```cpp
  auto compCreateInfo = nvvk::make<VkComputePipelineCreateInfo>;
  ```

## `nvvk::clear`

  Contains templated `nvvk::clear<T>` function 
  auto-generated by `structs.lua`.
@DOC_END */

#pragma once
namespace nvvk {
template <class T>
T make()
{
  return T();
}
template <class T>
void clear(T& ref)
{
  ref = make<T>();
}
template <>
inline VkApplicationInfo make<VkApplicationInfo>()
{
  return VkApplicationInfo{VK_STRUCTURE_TYPE_APPLICATION_INFO};
}
template <>
inline VkDeviceQueueCreateInfo make<VkDeviceQueueCreateInfo>()
{
  return VkDeviceQueueCreateInfo{VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO};
}
template <>
inline VkDeviceCreateInfo make<VkDeviceCreateInfo>()
{
  return VkDeviceCreateInfo{VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO};
}
template <>
inline VkInstanceCreateInfo make<VkInstanceCreateInfo>()
{
  return VkInstanceCreateInfo{VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO};
}
template <>
inline VkMemoryAllocateInfo make<VkMemoryAllocateInfo>()
{
  return VkMemoryAllocateInfo{VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO};
}
template <>
inline VkMappedMemoryRange make<VkMappedMemoryRange>()
{
  return VkMappedMemoryRange{VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE};
}
template <>
inline VkWriteDescriptorSet make<VkWriteDescriptorSet>()
{
  return VkWriteDescriptorSet{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET};
}
template <>
inline VkCopyDescriptorSet make<VkCopyDescriptorSet>()
{
  return VkCopyDescriptorSet{VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET};
}
template <>
inline VkBufferCreateInfo make<VkBufferCreateInfo>()
{
  return VkBufferCreateInfo{VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO};
}
template <>
inline VkBufferViewCreateInfo make<VkBufferViewCreateInfo>()
{
  return VkBufferViewCreateInfo{VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO};
}
template <>
inline VkMemoryBarrier make<VkMemoryBarrier>()
{
  return VkMemoryBarrier{VK_STRUCTURE_TYPE_MEMORY_BARRIER};
}
template <>
inline VkBufferMemoryBarrier make<VkBufferMemoryBarrier>()
{
  return VkBufferMemoryBarrier{VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER};
}
template <>
inline VkImageMemoryBarrier make<VkImageMemoryBarrier>()
{
  return VkImageMemoryBarrier{VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER};
}
template <>
inline VkImageCreateInfo make<VkImageCreateInfo>()
{
  return VkImageCreateInfo{VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO};
}
template <>
inline VkImageViewCreateInfo make<VkImageViewCreateInfo>()
{
  return VkImageViewCreateInfo{VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO};
}
template <>
inline VkBindSparseInfo make<VkBindSparseInfo>()
{
  return VkBindSparseInfo{VK_STRUCTURE_TYPE_BIND_SPARSE_INFO};
}
template <>
inline VkShaderModuleCreateInfo make<VkShaderModuleCreateInfo>()
{
  return VkShaderModuleCreateInfo{VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO};
}
template <>
inline VkDescriptorSetLayoutCreateInfo make<VkDescriptorSetLayoutCreateInfo>()
{
  return VkDescriptorSetLayoutCreateInfo{VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO};
}
template <>
inline VkDescriptorPoolCreateInfo make<VkDescriptorPoolCreateInfo>()
{
  return VkDescriptorPoolCreateInfo{VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO};
}
template <>
inline VkDescriptorSetAllocateInfo make<VkDescriptorSetAllocateInfo>()
{
  return VkDescriptorSetAllocateInfo{VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO};
}
template <>
inline VkPipelineShaderStageCreateInfo make<VkPipelineShaderStageCreateInfo>()
{
  return VkPipelineShaderStageCreateInfo{VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO};
}
template <>
inline VkComputePipelineCreateInfo make<VkComputePipelineCreateInfo>()
{
  VkComputePipelineCreateInfo ret = {VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO};
  ret.stage                       = {VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO};
  return ret;
}
template <>
inline VkPipelineVertexInputStateCreateInfo make<VkPipelineVertexInputStateCreateInfo>()
{
  return VkPipelineVertexInputStateCreateInfo{VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO};
}
template <>
inline VkPipelineInputAssemblyStateCreateInfo make<VkPipelineInputAssemblyStateCreateInfo>()
{
  return VkPipelineInputAssemblyStateCreateInfo{VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO};
}
template <>
inline VkPipelineTessellationStateCreateInfo make<VkPipelineTessellationStateCreateInfo>()
{
  return VkPipelineTessellationStateCreateInfo{VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO};
}
template <>
inline VkPipelineViewportStateCreateInfo make<VkPipelineViewportStateCreateInfo>()
{
  return VkPipelineViewportStateCreateInfo{VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO};
}
template <>
inline VkPipelineRasterizationStateCreateInfo make<VkPipelineRasterizationStateCreateInfo>()
{
  return VkPipelineRasterizationStateCreateInfo{VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO};
}
template <>
inline VkPipelineMultisampleStateCreateInfo make<VkPipelineMultisampleStateCreateInfo>()
{
  return VkPipelineMultisampleStateCreateInfo{VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO};
}
template <>
inline VkPipelineColorBlendStateCreateInfo make<VkPipelineColorBlendStateCreateInfo>()
{
  return VkPipelineColorBlendStateCreateInfo{VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO};
}
template <>
inline VkPipelineDynamicStateCreateInfo make<VkPipelineDynamicStateCreateInfo>()
{
  return VkPipelineDynamicStateCreateInfo{VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO};
}
template <>
inline VkPipelineDepthStencilStateCreateInfo make<VkPipelineDepthStencilStateCreateInfo>()
{
  return VkPipelineDepthStencilStateCreateInfo{VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO};
}
template <>
inline VkGraphicsPipelineCreateInfo make<VkGraphicsPipelineCreateInfo>()
{
  return VkGraphicsPipelineCreateInfo{VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO};
}
template <>
inline VkPipelineCacheCreateInfo make<VkPipelineCacheCreateInfo>()
{
  return VkPipelineCacheCreateInfo{VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO};
}
template <>
inline VkPipelineLayoutCreateInfo make<VkPipelineLayoutCreateInfo>()
{
  return VkPipelineLayoutCreateInfo{VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO};
}
template <>
inline VkSamplerCreateInfo make<VkSamplerCreateInfo>()
{
  return VkSamplerCreateInfo{VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO};
}
template <>
inline VkCommandPoolCreateInfo make<VkCommandPoolCreateInfo>()
{
  return VkCommandPoolCreateInfo{VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO};
}
template <>
inline VkCommandBufferAllocateInfo make<VkCommandBufferAllocateInfo>()
{
  return VkCommandBufferAllocateInfo{VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO};
}
template <>
inline VkCommandBufferInheritanceInfo make<VkCommandBufferInheritanceInfo>()
{
  return VkCommandBufferInheritanceInfo{VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO};
}
template <>
inline VkCommandBufferBeginInfo make<VkCommandBufferBeginInfo>()
{
  return VkCommandBufferBeginInfo{VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO};
}
template <>
inline VkRenderPassBeginInfo make<VkRenderPassBeginInfo>()
{
  return VkRenderPassBeginInfo{VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO};
}
template <>
inline VkRenderPassCreateInfo make<VkRenderPassCreateInfo>()
{
  return VkRenderPassCreateInfo{VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO};
}
template <>
inline VkEventCreateInfo make<VkEventCreateInfo>()
{
  return VkEventCreateInfo{VK_STRUCTURE_TYPE_EVENT_CREATE_INFO};
}
template <>
inline VkFenceCreateInfo make<VkFenceCreateInfo>()
{
  return VkFenceCreateInfo{VK_STRUCTURE_TYPE_FENCE_CREATE_INFO};
}
template <>
inline VkSemaphoreCreateInfo make<VkSemaphoreCreateInfo>()
{
  return VkSemaphoreCreateInfo{VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO};
}
template <>
inline VkQueryPoolCreateInfo make<VkQueryPoolCreateInfo>()
{
  return VkQueryPoolCreateInfo{VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO};
}
template <>
inline VkFramebufferCreateInfo make<VkFramebufferCreateInfo>()
{
  return VkFramebufferCreateInfo{VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO};
}
template <>
inline VkSubmitInfo make<VkSubmitInfo>()
{
  return VkSubmitInfo{VK_STRUCTURE_TYPE_SUBMIT_INFO};
}
template <>
inline VkPhysicalDeviceFeatures2 make<VkPhysicalDeviceFeatures2>()
{
  return VkPhysicalDeviceFeatures2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2};
}
template <>
inline VkPhysicalDeviceProperties2 make<VkPhysicalDeviceProperties2>()
{
  return VkPhysicalDeviceProperties2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2};
}
template <>
inline VkFormatProperties2 make<VkFormatProperties2>()
{
  return VkFormatProperties2{VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2};
}
template <>
inline VkImageFormatProperties2 make<VkImageFormatProperties2>()
{
  return VkImageFormatProperties2{VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2};
}
template <>
inline VkPhysicalDeviceImageFormatInfo2 make<VkPhysicalDeviceImageFormatInfo2>()
{
  return VkPhysicalDeviceImageFormatInfo2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2};
}
template <>
inline VkQueueFamilyProperties2 make<VkQueueFamilyProperties2>()
{
  return VkQueueFamilyProperties2{VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2};
}
template <>
inline VkPhysicalDeviceMemoryProperties2 make<VkPhysicalDeviceMemoryProperties2>()
{
  return VkPhysicalDeviceMemoryProperties2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2};
}
template <>
inline VkSparseImageFormatProperties2 make<VkSparseImageFormatProperties2>()
{
  return VkSparseImageFormatProperties2{VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2};
}
template <>
inline VkPhysicalDeviceSparseImageFormatInfo2 make<VkPhysicalDeviceSparseImageFormatInfo2>()
{
  return VkPhysicalDeviceSparseImageFormatInfo2{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2};
}
template <>
inline VkPhysicalDeviceDriverProperties make<VkPhysicalDeviceDriverProperties>()
{
  return VkPhysicalDeviceDriverProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES};
}
template <>
inline VkPhysicalDeviceVariablePointersFeatures make<VkPhysicalDeviceVariablePointersFeatures>()
{
  return VkPhysicalDeviceVariablePointersFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES};
}
template <>
inline VkPhysicalDeviceExternalImageFormatInfo make<VkPhysicalDeviceExternalImageFormatInfo>()
{
  return VkPhysicalDeviceExternalImageFormatInfo{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO};
}
template <>
inline VkExternalImageFormatProperties make<VkExternalImageFormatProperties>()
{
  return VkExternalImageFormatProperties{VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES};
}
template <>
inline VkPhysicalDeviceExternalBufferInfo make<VkPhysicalDeviceExternalBufferInfo>()
{
  return VkPhysicalDeviceExternalBufferInfo{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO};
}
template <>
inline VkExternalBufferProperties make<VkExternalBufferProperties>()
{
  return VkExternalBufferProperties{VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES};
}
template <>
inline VkPhysicalDeviceIDProperties make<VkPhysicalDeviceIDProperties>()
{
  return VkPhysicalDeviceIDProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES};
}
template <>
inline VkExternalMemoryImageCreateInfo make<VkExternalMemoryImageCreateInfo>()
{
  return VkExternalMemoryImageCreateInfo{VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO};
}
template <>
inline VkExternalMemoryBufferCreateInfo make<VkExternalMemoryBufferCreateInfo>()
{
  return VkExternalMemoryBufferCreateInfo{VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO};
}
template <>
inline VkExportMemoryAllocateInfo make<VkExportMemoryAllocateInfo>()
{
  return VkExportMemoryAllocateInfo{VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO};
}
template <>
inline VkPhysicalDeviceExternalSemaphoreInfo make<VkPhysicalDeviceExternalSemaphoreInfo>()
{
  return VkPhysicalDeviceExternalSemaphoreInfo{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO};
}
template <>
inline VkExternalSemaphoreProperties make<VkExternalSemaphoreProperties>()
{
  return VkExternalSemaphoreProperties{VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES};
}
template <>
inline VkExportSemaphoreCreateInfo make<VkExportSemaphoreCreateInfo>()
{
  return VkExportSemaphoreCreateInfo{VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO};
}
template <>
inline VkPhysicalDeviceExternalFenceInfo make<VkPhysicalDeviceExternalFenceInfo>()
{
  return VkPhysicalDeviceExternalFenceInfo{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO};
}
template <>
inline VkExternalFenceProperties make<VkExternalFenceProperties>()
{
  return VkExternalFenceProperties{VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES};
}
template <>
inline VkExportFenceCreateInfo make<VkExportFenceCreateInfo>()
{
  return VkExportFenceCreateInfo{VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO};
}
template <>
inline VkPhysicalDeviceMultiviewFeatures make<VkPhysicalDeviceMultiviewFeatures>()
{
  return VkPhysicalDeviceMultiviewFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES};
}
template <>
inline VkPhysicalDeviceMultiviewProperties make<VkPhysicalDeviceMultiviewProperties>()
{
  return VkPhysicalDeviceMultiviewProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES};
}
template <>
inline VkRenderPassMultiviewCreateInfo make<VkRenderPassMultiviewCreateInfo>()
{
  return VkRenderPassMultiviewCreateInfo{VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO};
}
template <>
inline VkPhysicalDeviceGroupProperties make<VkPhysicalDeviceGroupProperties>()
{
  return VkPhysicalDeviceGroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES};
}
template <>
inline VkMemoryAllocateFlagsInfo make<VkMemoryAllocateFlagsInfo>()
{
  return VkMemoryAllocateFlagsInfo{VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO};
}
template <>
inline VkBindBufferMemoryInfo make<VkBindBufferMemoryInfo>()
{
  return VkBindBufferMemoryInfo{VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO};
}
template <>
inline VkBindBufferMemoryDeviceGroupInfo make<VkBindBufferMemoryDeviceGroupInfo>()
{
  return VkBindBufferMemoryDeviceGroupInfo{VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO};
}
template <>
inline VkBindImageMemoryInfo make<VkBindImageMemoryInfo>()
{
  return VkBindImageMemoryInfo{VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO};
}
template <>
inline VkBindImageMemoryDeviceGroupInfo make<VkBindImageMemoryDeviceGroupInfo>()
{
  return VkBindImageMemoryDeviceGroupInfo{VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO};
}
template <>
inline VkDeviceGroupRenderPassBeginInfo make<VkDeviceGroupRenderPassBeginInfo>()
{
  return VkDeviceGroupRenderPassBeginInfo{VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO};
}
template <>
inline VkDeviceGroupCommandBufferBeginInfo make<VkDeviceGroupCommandBufferBeginInfo>()
{
  return VkDeviceGroupCommandBufferBeginInfo{VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO};
}
template <>
inline VkDeviceGroupSubmitInfo make<VkDeviceGroupSubmitInfo>()
{
  return VkDeviceGroupSubmitInfo{VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO};
}
template <>
inline VkDeviceGroupBindSparseInfo make<VkDeviceGroupBindSparseInfo>()
{
  return VkDeviceGroupBindSparseInfo{VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO};
}
template <>
inline VkDeviceGroupDeviceCreateInfo make<VkDeviceGroupDeviceCreateInfo>()
{
  return VkDeviceGroupDeviceCreateInfo{VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO};
}
template <>
inline VkDescriptorUpdateTemplateCreateInfo make<VkDescriptorUpdateTemplateCreateInfo>()
{
  return VkDescriptorUpdateTemplateCreateInfo{VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO};
}
template <>
inline VkRenderPassInputAttachmentAspectCreateInfo make<VkRenderPassInputAttachmentAspectCreateInfo>()
{
  return VkRenderPassInputAttachmentAspectCreateInfo{VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO};
}
template <>
inline VkPhysicalDevice16BitStorageFeatures make<VkPhysicalDevice16BitStorageFeatures>()
{
  return VkPhysicalDevice16BitStorageFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES};
}
template <>
inline VkPhysicalDeviceSubgroupProperties make<VkPhysicalDeviceSubgroupProperties>()
{
  return VkPhysicalDeviceSubgroupProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES};
}
template <>
inline VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures make<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures>()
{
  return VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES};
}
template <>
inline VkBufferMemoryRequirementsInfo2 make<VkBufferMemoryRequirementsInfo2>()
{
  return VkBufferMemoryRequirementsInfo2{VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2};
}
template <>
inline VkImageMemoryRequirementsInfo2 make<VkImageMemoryRequirementsInfo2>()
{
  return VkImageMemoryRequirementsInfo2{VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2};
}
template <>
inline VkImageSparseMemoryRequirementsInfo2 make<VkImageSparseMemoryRequirementsInfo2>()
{
  return VkImageSparseMemoryRequirementsInfo2{VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2};
}
template <>
inline VkMemoryRequirements2 make<VkMemoryRequirements2>()
{
  return VkMemoryRequirements2{VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2};
}
template <>
inline VkSparseImageMemoryRequirements2 make<VkSparseImageMemoryRequirements2>()
{
  return VkSparseImageMemoryRequirements2{VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2};
}
template <>
inline VkPhysicalDevicePointClippingProperties make<VkPhysicalDevicePointClippingProperties>()
{
  return VkPhysicalDevicePointClippingProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES};
}
template <>
inline VkMemoryDedicatedRequirements make<VkMemoryDedicatedRequirements>()
{
  return VkMemoryDedicatedRequirements{VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS};
}
template <>
inline VkMemoryDedicatedAllocateInfo make<VkMemoryDedicatedAllocateInfo>()
{
  return VkMemoryDedicatedAllocateInfo{VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO};
}
template <>
inline VkImageViewUsageCreateInfo make<VkImageViewUsageCreateInfo>()
{
  return VkImageViewUsageCreateInfo{VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO};
}
template <>
inline VkPipelineTessellationDomainOriginStateCreateInfo make<VkPipelineTessellationDomainOriginStateCreateInfo>()
{
  return VkPipelineTessellationDomainOriginStateCreateInfo{VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO};
}
template <>
inline VkSamplerYcbcrConversionInfo make<VkSamplerYcbcrConversionInfo>()
{
  return VkSamplerYcbcrConversionInfo{VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO};
}
template <>
inline VkSamplerYcbcrConversionCreateInfo make<VkSamplerYcbcrConversionCreateInfo>()
{
  return VkSamplerYcbcrConversionCreateInfo{VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO};
}
template <>
inline VkBindImagePlaneMemoryInfo make<VkBindImagePlaneMemoryInfo>()
{
  return VkBindImagePlaneMemoryInfo{VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO};
}
template <>
inline VkImagePlaneMemoryRequirementsInfo make<VkImagePlaneMemoryRequirementsInfo>()
{
  return VkImagePlaneMemoryRequirementsInfo{VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO};
}
template <>
inline VkPhysicalDeviceSamplerYcbcrConversionFeatures make<VkPhysicalDeviceSamplerYcbcrConversionFeatures>()
{
  return VkPhysicalDeviceSamplerYcbcrConversionFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES};
}
template <>
inline VkSamplerYcbcrConversionImageFormatProperties make<VkSamplerYcbcrConversionImageFormatProperties>()
{
  return VkSamplerYcbcrConversionImageFormatProperties{VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES};
}
template <>
inline VkProtectedSubmitInfo make<VkProtectedSubmitInfo>()
{
  return VkProtectedSubmitInfo{VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO};
}
template <>
inline VkPhysicalDeviceProtectedMemoryFeatures make<VkPhysicalDeviceProtectedMemoryFeatures>()
{
  return VkPhysicalDeviceProtectedMemoryFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES};
}
template <>
inline VkPhysicalDeviceProtectedMemoryProperties make<VkPhysicalDeviceProtectedMemoryProperties>()
{
  return VkPhysicalDeviceProtectedMemoryProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES};
}
template <>
inline VkDeviceQueueInfo2 make<VkDeviceQueueInfo2>()
{
  return VkDeviceQueueInfo2{VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2};
}
template <>
inline VkPhysicalDeviceSamplerFilterMinmaxProperties make<VkPhysicalDeviceSamplerFilterMinmaxProperties>()
{
  return VkPhysicalDeviceSamplerFilterMinmaxProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES};
}
template <>
inline VkSamplerReductionModeCreateInfo make<VkSamplerReductionModeCreateInfo>()
{
  return VkSamplerReductionModeCreateInfo{VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO};
}
template <>
inline VkImageFormatListCreateInfo make<VkImageFormatListCreateInfo>()
{
  return VkImageFormatListCreateInfo{VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO};
}
template <>
inline VkPhysicalDeviceMaintenance3Properties make<VkPhysicalDeviceMaintenance3Properties>()
{
  return VkPhysicalDeviceMaintenance3Properties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES};
}
template <>
inline VkDescriptorSetLayoutSupport make<VkDescriptorSetLayoutSupport>()
{
  return VkDescriptorSetLayoutSupport{VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT};
}
template <>
inline VkPhysicalDeviceShaderDrawParametersFeatures make<VkPhysicalDeviceShaderDrawParametersFeatures>()
{
  return VkPhysicalDeviceShaderDrawParametersFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES};
}
template <>
inline VkPhysicalDeviceShaderFloat16Int8Features make<VkPhysicalDeviceShaderFloat16Int8Features>()
{
  return VkPhysicalDeviceShaderFloat16Int8Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES};
}
template <>
inline VkPhysicalDeviceFloatControlsProperties make<VkPhysicalDeviceFloatControlsProperties>()
{
  return VkPhysicalDeviceFloatControlsProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES};
}
template <>
inline VkPhysicalDeviceHostQueryResetFeatures make<VkPhysicalDeviceHostQueryResetFeatures>()
{
  return VkPhysicalDeviceHostQueryResetFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES};
}
template <>
inline VkPhysicalDeviceDescriptorIndexingFeatures make<VkPhysicalDeviceDescriptorIndexingFeatures>()
{
  return VkPhysicalDeviceDescriptorIndexingFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES};
}
template <>
inline VkPhysicalDeviceDescriptorIndexingProperties make<VkPhysicalDeviceDescriptorIndexingProperties>()
{
  return VkPhysicalDeviceDescriptorIndexingProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES};
}
template <>
inline VkDescriptorSetLayoutBindingFlagsCreateInfo make<VkDescriptorSetLayoutBindingFlagsCreateInfo>()
{
  return VkDescriptorSetLayoutBindingFlagsCreateInfo{VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO};
}
template <>
inline VkDescriptorSetVariableDescriptorCountAllocateInfo make<VkDescriptorSetVariableDescriptorCountAllocateInfo>()
{
  return VkDescriptorSetVariableDescriptorCountAllocateInfo{VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO};
}
template <>
inline VkDescriptorSetVariableDescriptorCountLayoutSupport make<VkDescriptorSetVariableDescriptorCountLayoutSupport>()
{
  return VkDescriptorSetVariableDescriptorCountLayoutSupport{VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT};
}
template <>
inline VkAttachmentDescription2 make<VkAttachmentDescription2>()
{
  return VkAttachmentDescription2{VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2};
}
template <>
inline VkAttachmentReference2 make<VkAttachmentReference2>()
{
  return VkAttachmentReference2{VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2};
}
template <>
inline VkSubpassDescription2 make<VkSubpassDescription2>()
{
  return VkSubpassDescription2{VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2};
}
template <>
inline VkSubpassDependency2 make<VkSubpassDependency2>()
{
  return VkSubpassDependency2{VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2};
}
template <>
inline VkRenderPassCreateInfo2 make<VkRenderPassCreateInfo2>()
{
  return VkRenderPassCreateInfo2{VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2};
}
template <>
inline VkSubpassBeginInfo make<VkSubpassBeginInfo>()
{
  return VkSubpassBeginInfo{VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO};
}
template <>
inline VkSubpassEndInfo make<VkSubpassEndInfo>()
{
  return VkSubpassEndInfo{VK_STRUCTURE_TYPE_SUBPASS_END_INFO};
}
template <>
inline VkPhysicalDeviceTimelineSemaphoreFeatures make<VkPhysicalDeviceTimelineSemaphoreFeatures>()
{
  return VkPhysicalDeviceTimelineSemaphoreFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES};
}
template <>
inline VkPhysicalDeviceTimelineSemaphoreProperties make<VkPhysicalDeviceTimelineSemaphoreProperties>()
{
  return VkPhysicalDeviceTimelineSemaphoreProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES};
}
template <>
inline VkSemaphoreTypeCreateInfo make<VkSemaphoreTypeCreateInfo>()
{
  return VkSemaphoreTypeCreateInfo{VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO};
}
template <>
inline VkTimelineSemaphoreSubmitInfo make<VkTimelineSemaphoreSubmitInfo>()
{
  return VkTimelineSemaphoreSubmitInfo{VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO};
}
template <>
inline VkSemaphoreWaitInfo make<VkSemaphoreWaitInfo>()
{
  return VkSemaphoreWaitInfo{VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO};
}
template <>
inline VkSemaphoreSignalInfo make<VkSemaphoreSignalInfo>()
{
  return VkSemaphoreSignalInfo{VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO};
}
template <>
inline VkPhysicalDevice8BitStorageFeatures make<VkPhysicalDevice8BitStorageFeatures>()
{
  return VkPhysicalDevice8BitStorageFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES};
}
template <>
inline VkPhysicalDeviceVulkanMemoryModelFeatures make<VkPhysicalDeviceVulkanMemoryModelFeatures>()
{
  return VkPhysicalDeviceVulkanMemoryModelFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES};
}
template <>
inline VkPhysicalDeviceShaderAtomicInt64Features make<VkPhysicalDeviceShaderAtomicInt64Features>()
{
  return VkPhysicalDeviceShaderAtomicInt64Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES};
}
template <>
inline VkPhysicalDeviceDepthStencilResolveProperties make<VkPhysicalDeviceDepthStencilResolveProperties>()
{
  return VkPhysicalDeviceDepthStencilResolveProperties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES};
}
template <>
inline VkSubpassDescriptionDepthStencilResolve make<VkSubpassDescriptionDepthStencilResolve>()
{
  return VkSubpassDescriptionDepthStencilResolve{VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE};
}
template <>
inline VkImageStencilUsageCreateInfo make<VkImageStencilUsageCreateInfo>()
{
  return VkImageStencilUsageCreateInfo{VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO};
}
template <>
inline VkPhysicalDeviceScalarBlockLayoutFeatures make<VkPhysicalDeviceScalarBlockLayoutFeatures>()
{
  return VkPhysicalDeviceScalarBlockLayoutFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES};
}
template <>
inline VkPhysicalDeviceUniformBufferStandardLayoutFeatures make<VkPhysicalDeviceUniformBufferStandardLayoutFeatures>()
{
  return VkPhysicalDeviceUniformBufferStandardLayoutFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES};
}
template <>
inline VkPhysicalDeviceBufferDeviceAddressFeatures make<VkPhysicalDeviceBufferDeviceAddressFeatures>()
{
  return VkPhysicalDeviceBufferDeviceAddressFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES};
}
template <>
inline VkBufferDeviceAddressInfo make<VkBufferDeviceAddressInfo>()
{
  return VkBufferDeviceAddressInfo{VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO};
}
template <>
inline VkBufferOpaqueCaptureAddressCreateInfo make<VkBufferOpaqueCaptureAddressCreateInfo>()
{
  return VkBufferOpaqueCaptureAddressCreateInfo{VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO};
}
template <>
inline VkPhysicalDeviceImagelessFramebufferFeatures make<VkPhysicalDeviceImagelessFramebufferFeatures>()
{
  return VkPhysicalDeviceImagelessFramebufferFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES};
}
template <>
inline VkFramebufferAttachmentsCreateInfo make<VkFramebufferAttachmentsCreateInfo>()
{
  return VkFramebufferAttachmentsCreateInfo{VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO};
}
template <>
inline VkFramebufferAttachmentImageInfo make<VkFramebufferAttachmentImageInfo>()
{
  return VkFramebufferAttachmentImageInfo{VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO};
}
template <>
inline VkRenderPassAttachmentBeginInfo make<VkRenderPassAttachmentBeginInfo>()
{
  return VkRenderPassAttachmentBeginInfo{VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO};
}
template <>
inline VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures make<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures>()
{
  return VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES};
}
template <>
inline VkAttachmentReferenceStencilLayout make<VkAttachmentReferenceStencilLayout>()
{
  return VkAttachmentReferenceStencilLayout{VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT};
}
template <>
inline VkAttachmentDescriptionStencilLayout make<VkAttachmentDescriptionStencilLayout>()
{
  return VkAttachmentDescriptionStencilLayout{VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT};
}
template <>
inline VkMemoryOpaqueCaptureAddressAllocateInfo make<VkMemoryOpaqueCaptureAddressAllocateInfo>()
{
  return VkMemoryOpaqueCaptureAddressAllocateInfo{VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO};
}
template <>
inline VkDeviceMemoryOpaqueCaptureAddressInfo make<VkDeviceMemoryOpaqueCaptureAddressInfo>()
{
  return VkDeviceMemoryOpaqueCaptureAddressInfo{VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO};
}
template <>
inline VkPhysicalDeviceVulkan11Features make<VkPhysicalDeviceVulkan11Features>()
{
  return VkPhysicalDeviceVulkan11Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES};
}
template <>
inline VkPhysicalDeviceVulkan11Properties make<VkPhysicalDeviceVulkan11Properties>()
{
  return VkPhysicalDeviceVulkan11Properties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES};
}
template <>
inline VkPhysicalDeviceVulkan12Features make<VkPhysicalDeviceVulkan12Features>()
{
  return VkPhysicalDeviceVulkan12Features{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES};
}
template <>
inline VkPhysicalDeviceVulkan12Properties make<VkPhysicalDeviceVulkan12Properties>()
{
  return VkPhysicalDeviceVulkan12Properties{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES};
}
#if VK_KHR_swapchain
template <>
inline VkSwapchainCreateInfoKHR make<VkSwapchainCreateInfoKHR>()
{
  return VkSwapchainCreateInfoKHR{VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR};
}
template <>
inline VkPresentInfoKHR make<VkPresentInfoKHR>()
{
  return VkPresentInfoKHR{VK_STRUCTURE_TYPE_PRESENT_INFO_KHR};
}
template <>
inline VkImageSwapchainCreateInfoKHR make<VkImageSwapchainCreateInfoKHR>()
{
  return VkImageSwapchainCreateInfoKHR{VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR};
}
template <>
inline VkBindImageMemorySwapchainInfoKHR make<VkBindImageMemorySwapchainInfoKHR>()
{
  return VkBindImageMemorySwapchainInfoKHR{VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR};
}
template <>
inline VkAcquireNextImageInfoKHR make<VkAcquireNextImageInfoKHR>()
{
  return VkAcquireNextImageInfoKHR{VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR};
}
template <>
inline VkDeviceGroupPresentCapabilitiesKHR make<VkDeviceGroupPresentCapabilitiesKHR>()
{
  return VkDeviceGroupPresentCapabilitiesKHR{VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR};
}
template <>
inline VkDeviceGroupPresentInfoKHR make<VkDeviceGroupPresentInfoKHR>()
{
  return VkDeviceGroupPresentInfoKHR{VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR};
}
template <>
inline VkDeviceGroupSwapchainCreateInfoKHR make<VkDeviceGroupSwapchainCreateInfoKHR>()
{
  return VkDeviceGroupSwapchainCreateInfoKHR{VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR};
}
#endif
#if VK_EXT_debug_marker
template <>
inline VkDebugMarkerObjectNameInfoEXT make<VkDebugMarkerObjectNameInfoEXT>()
{
  return VkDebugMarkerObjectNameInfoEXT{VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT};
}
template <>
inline VkDebugMarkerObjectTagInfoEXT make<VkDebugMarkerObjectTagInfoEXT>()
{
  return VkDebugMarkerObjectTagInfoEXT{VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT};
}
template <>
inline VkDebugMarkerMarkerInfoEXT make<VkDebugMarkerMarkerInfoEXT>()
{
  return VkDebugMarkerMarkerInfoEXT{VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT};
}
#endif
#if VK_NV_corner_sampled_image
template <>
inline VkPhysicalDeviceCornerSampledImageFeaturesNV make<VkPhysicalDeviceCornerSampledImageFeaturesNV>()
{
  return VkPhysicalDeviceCornerSampledImageFeaturesNV{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV};
}
#endif
#if VK_KHR_external_memory_win32
template <>
inline VkImportMemoryWin32HandleInfoKHR make<VkImportMemoryWin32HandleInfoKHR>()
{
  return VkImportMemoryWin32HandleInfoKHR{VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR};
}
template <>
inline VkExportMemoryWin32HandleInfoKHR make<VkExportMemoryWin32HandleInfoKHR>()
{
  return VkExportMemoryWin32HandleInfoKHR{VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR};
}
template <>
inline VkMemoryWin32HandlePropertiesKHR make<VkMemoryWin32HandlePropertiesKHR>()
{
  return VkMemoryWin32HandlePropertiesKHR{VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR};
}
template <>
inline VkMemoryGetWin32HandleInfoKHR make<VkMemoryGetWin32HandleInfoKHR>()
{
  return VkMemoryGetWin32HandleInfoKHR{VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR};
}
#endif
#if VK_KHR_external_memory_fd
template <>
inline VkImportMemoryFdInfoKHR make<VkImportMemoryFdInfoKHR>()
{
  return VkImportMemoryFdInfoKHR{VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR};
}
template <>
inline VkMemoryFdPropertiesKHR make<VkMemoryFdPropertiesKHR>()
{
  return VkMemoryFdPropertiesKHR{VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR};
}
template <>
inline VkMemoryGetFdInfoKHR make<VkMemoryGetFdInfoKHR>()
{
  return VkMemoryGetFdInfoKHR{VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR};
}
#endif
#if VK_KHR_external_semaphore_win32
template <>
inline VkImportSemaphoreWin32HandleInfoKHR make<VkImportSemaphoreWin32HandleInfoKHR>()
{
  return VkImportSemaphoreWin32HandleInfoKHR{VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR};
}
template <>
inline VkExportSemaphoreWin32HandleInfoKHR make<VkExportSemaphoreWin32HandleInfoKHR>()
{
  return VkExportSemaphoreWin32HandleInfoKHR{VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR};
}
template <>
inline VkD3D12FenceSubmitInfoKHR make<VkD3D12FenceSubmitInfoKHR>()
{
  return VkD3D12FenceSubmitInfoKHR{VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR};
}
template <>
inline VkSemaphoreGetWin32HandleInfoKHR make<VkSemaphoreGetWin32HandleInfoKHR>()
{
  return VkSemaphoreGetWin32HandleInfoKHR{VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR};
}
#endif
#if VK_KHR_external_semaphore_fd
template <>
inline VkImportSemaphoreFdInfoKHR make<VkImportSemaphoreFdInfoKHR>()
{
  return VkImportSemaphoreFdInfoKHR{VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR};
}
template <>
inline VkSemaphoreGetFdInfoKHR make<VkSemaphoreGetFdInfoKHR>()
{
  return VkSemaphoreGetFdInfoKHR{VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR};
}
#endif
#if VK_KHR_push_descriptor
template <>
inline VkPhysicalDevicePushDescriptorPropertiesKHR make<VkPhysicalDevicePushDescriptorPropertiesKHR>()
{
  return VkPhysicalDevicePushDescriptorPropertiesKHR{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR};
}
#endif
#if VK_NV_viewport_swizzle
template <>
inline VkPipelineViewportSwizzleStateCreateInfoNV make<VkPipelineViewportSwizzleStateCreateInfoNV>()
{
  return VkPipelineViewportSwizzleStateCreateInfoNV{VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV};
}
#endif
#if VK_EXT_conservative_rasterization
template <>
inline VkPhysicalDeviceConservativeRasterizationPropertiesEXT make<VkPhysicalDeviceConservativeRasterizationPropertiesEXT>()
{
  return VkPhysicalDeviceConservativeRasterizationPropertiesEXT{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT};
}
template <>
inline VkPipelineRasterizationConservativeStateCreateInfoEXT make<VkPipelineRasterizationConservativeStateCreateInfoEXT>()
{
  return VkPipelineRasterizationConservativeStateCreateInfoEXT{VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT};
}
#endif
#if VK_EXT_depth_clip_enable
template <>
inline VkPhysicalDeviceDepthClipEnableFeaturesEXT make<VkPhysicalDeviceDepthClipEnableFeaturesEXT>()
{
  return VkPhysicalDeviceDepthClipEnableFeaturesEXT{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT};
}
template <>
inline VkPipelineRasterizationDepthClipStateCreateInfoEXT make<VkPipelineRasterizationDepthClipStateCreateInfoEXT>()
{
  return VkPipelineRasterizationDepthClipStateCreateInfoEXT{VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT};
}
#endif
#if VK_KHR_external_fence_win32
template <>
inline VkImportFenceWin32HandleInfoKHR make<VkImportFenceWin32HandleInfoKHR>()
{
  return VkImportFenceWin32HandleInfoKHR{VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR};
}
template <>
inline VkExportFenceWin32HandleInfoKHR make<VkExportFenceWin32HandleInfoKHR>()
{
  return VkExportFenceWin32HandleInfoKHR{VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR};
}
template <>
inline VkFenceGetWin32HandleInfoKHR make<VkFenceGetWin32HandleInfoKHR>()
{
  return VkFenceGetWin32HandleInfoKHR{VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR};
}
#endif
#if VK_EXT_debug_utils
template <>
inline VkDebugUtilsLabelEXT make<VkDebugUtilsLabelEXT>()
{
  return VkDebugUtilsLabelEXT{VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT};
}
template <>
inline VkDebugUtilsMessengerCallbackDataEXT make<VkDebugUtilsMessengerCallbackDataEXT>()
{
  return VkDebugUtilsMessengerCallbackDataEXT{VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT};
}
template <>
inline VkDebugUtilsMessengerCreateInfoEXT make<VkDebugUtilsMessengerCreateInfoEXT>()
{
  return VkDebugUtilsMessengerCreateInfoEXT{VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT};
}
template <>
inline VkDebugUtilsObjectNameInfoEXT make<VkDebugUtilsObjectNameInfoEXT>()
{
  return VkDebugUtilsObjectNameInfoEXT{VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT};
}
template <>
inline VkDebugUtilsObjectTagInfoEXT make<VkDebugUtilsObjectTagInfoEXT>()
{
  return VkDebugUtilsObjectTagInfoEXT{VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT};
}
#endif
#if VK_EXT_sample_locations
template <>
inline VkSampleLocationsInfoEXT make<VkSampleLocationsInfoEXT>()
{
  return VkSampleLocationsInfoEXT{VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT};
}
template <>
inline VkRenderPassSampleLocationsBeginInfoEXT make<VkRenderPassSampleLocationsBeginInfoEXT>()
{
  return VkRenderPassSampleLocationsBeginInfoEXT{VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT};
}
template <>
inline VkPipelineSampleLocationsStateCreateInfoEXT make<VkPipelineSampleLocationsStateCreateInfoEXT>()
{
  VkPipelineSampleLocationsStateCreateInfoEXT ret = {VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT};
  ret.sampleLocationsInfo                         = {VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT};
  return ret;
}
template <>
inline VkPhysicalDeviceSampleLocationsPropertiesEXT make<VkPhysicalDeviceSampleLocationsPropertiesEXT>()
{
  return VkPhysicalDeviceSampleLocationsPropertiesEXT{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT};
}
template <>
inline VkMultisamplePropertiesEXT make<VkMultisamplePropertiesEXT>()
{
  return VkMultisamplePropertiesEXT{VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT};
}
#endif
#if VK_KHR_acceleration_structure
template <>
inline VkAccelerationStructureGeometryTrianglesDataKHR make<VkAccelerationStructureGeometryTrianglesDataKHR>()
{
  return VkAccelerationStructureGeometryTrianglesDataKHR{VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR};
}
template <>
inline VkAccelerationStructureBuildGeometryInfoKHR make<VkAccelerationStructureBuildGeometryInfoKHR>()
{
  return VkAccelerationStructureBuildGeometryInfoKHR{VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR};
}
template <>
inline VkAccelerationStructureGeometryAabbsDataKHR make<VkAccelerationStructureGeometryAabbsDataKHR>()
{
  return VkAccelerationStructureGeometryAabbsDataKHR{VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR};
}
template <>
inline VkAccelerationStructureGeometryInstancesDataKHR make<VkAccelerationStructureGeometryInstancesDataKHR>()
{
  return VkAccelerationStructureGeometryInstancesDataKHR{VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR};
}
template <>
inline VkAccelerationStructureGeometryKHR make<VkAccelerationStructureGeometryKHR>()
{
  return VkAccelerationStructureGeometryKHR{VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR};
}
template <>
inline VkAccelerationStructureCreateInfoKHR make<VkAccelerationStructureCreateInfoKHR>()
{
  return VkAccelerationStructureCreateInfoKHR{VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR};
}
template <>
inline VkWriteDescriptorSetAccelerationStructureKHR make<VkWriteDescriptorSetAccelerationStructureKHR>()
{
  return VkWriteDescriptorSetAccelerationStructureKHR{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR};
}
template <>
inline VkPhysicalDeviceAccelerationStructureFeaturesKHR make<VkPhysicalDeviceAccelerationStructureFeaturesKHR>()
{
  return VkPhysicalDeviceAccelerationStructureFeaturesKHR{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR};
}
template <>
inline VkPhysicalDeviceAccelerationStructurePropertiesKHR make<VkPhysicalDeviceAccelerationStructurePropertiesKHR>()
{
  return VkPhysicalDeviceAccelerationStructurePropertiesKHR{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR};
}
template <>
inline VkAccelerationStructureDeviceAddressInfoKHR make<VkAccelerationStructureDeviceAddressInfoKHR>()
{
  return VkAccelerationStructureDeviceAddressInfoKHR{VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR};
}
template <>
inline VkAccelerationStructureVersionInfoKHR make<VkAccelerationStructureVersionInfoKHR>()
{
  return VkAccelerationStructureVersionInfoKHR{VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR};
}
template <>
inline VkCopyAccelerationStructureToMemoryInfoKHR make<VkCopyAccelerationStructureToMemoryInfoKHR>()
{
  return VkCopyAccelerationStructureToMemoryInfoKHR{VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR};
}
template <>
inline VkCopyMemoryToAccelerationStructureInfoKHR make<VkCopyMemoryToAccelerationStructureInfoKHR>()
{
  return VkCopyMemoryToAccelerationStructureInfoKHR{VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR};
}
template <>
inline VkCopyAccelerationStructureInfoKHR make<VkCopyAccelerationStructureInfoKHR>()
{
  return VkCopyAccelerationStructureInfoKHR{VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR};
}
template <>
inline VkAccelerationStructureBuildSizesInfoKHR make<VkAccelerationStructureBuildSizesInfoKHR>()
{
  return VkAccelerationStructureBuildSizesInfoKHR{VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR};
}
#endif
#if VK_KHR_ray_tracing_pipeline
template <>
inline VkRayTracingShaderGroupCreateInfoKHR make<VkRayTracingShaderGroupCreateInfoKHR>()
{
  VkRayTracingShaderGroupCreateInfoKHR ret = {VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR};
  ret.generalShader                        = VK_SHADER_UNUSED_KHR;
  ret.closestHitShader                     = VK_SHADER_UNUSED_KHR;
  ret.anyHitShader                         = VK_SHADER_UNUSED_KHR;
  ret.intersectionShader                   = VK_SHADER_UNUSED_KHR;
  return ret;
}
template <>
inline VkRayTracingPipelineCreateInfoKHR make<VkRayTracingPipelineCreateInfoKHR>()
{
  return VkRayTracingPipelineCreateInfoKHR{VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR};
}
template <>
inline VkPhysicalDeviceRayTracingPipelineFeaturesKHR make<VkPhysicalDeviceRayTracingPipelineFeaturesKHR>()
{
  return VkPhysicalDeviceRayTracingPipelineFeaturesKHR{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR};
}
template <>
inline VkPhysicalDeviceRayTracingPipelinePropertiesKHR make<VkPhysicalDeviceRayTracingPipelinePropertiesKHR>()
{
  return VkPhysicalDeviceRayTracingPipelinePropertiesKHR{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR};
}
template <>
inline VkRayTracingPipelineInterfaceCreateInfoKHR make<VkRayTracingPipelineInterfaceCreateInfoKHR>()
{
  return VkRayTracingPipelineInterfaceCreateInfoKHR{VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR};
}
#endif
#if VK_KHR_ray_query
template <>
inline VkPhysicalDeviceRayQueryFeaturesKHR make<VkPhysicalDeviceRayQueryFeaturesKHR>()
{
  return VkPhysicalDeviceRayQueryFeaturesKHR{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR};
}
#endif
#if VK_NV_shading_rate_image
template <>
inline VkPipelineViewportShadingRateImageStateCreateInfoNV make<VkPipelineViewportShadingRateImageStateCreateInfoNV>()
{
  return VkPipelineViewportShadingRateImageStateCreateInfoNV{VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV};
}
template <>
inline VkPhysicalDeviceShadingRateImageFeaturesNV make<VkPhysicalDeviceShadingRateImageFeaturesNV>()
{
  return VkPhysicalDeviceShadingRateImageFeaturesNV{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV};
}
template <>
inline VkPhysicalDeviceShadingRateImagePropertiesNV make<VkPhysicalDeviceShadingRateImagePropertiesNV>()
{
  return VkPhysicalDeviceShadingRateImagePropertiesNV{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV};
}
template <>
inline VkPipelineViewportCoarseSampleOrderStateCreateInfoNV make<VkPipelineViewportCoarseSampleOrderStateCreateInfoNV>()
{
  return VkPipelineViewportCoarseSampleOrderStateCreateInfoNV{VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV};
}
#endif
#if VK_NV_ray_tracing
template <>
inline VkRayTracingShaderGroupCreateInfoNV make<VkRayTracingShaderGroupCreateInfoNV>()
{
  VkRayTracingShaderGroupCreateInfoNV ret = {VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV};
  ret.generalShader                       = VK_SHADER_UNUSED_NV;
  ret.closestHitShader                    = VK_SHADER_UNUSED_NV;
  ret.anyHitShader                        = VK_SHADER_UNUSED_NV;
  ret.intersectionShader                  = VK_SHADER_UNUSED_NV;
  return ret;
}
template <>
inline VkRayTracingPipelineCreateInfoNV make<VkRayTracingPipelineCreateInfoNV>()
{
  return VkRayTracingPipelineCreateInfoNV{VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV};
}
template <>
inline VkGeometryTrianglesNV make<VkGeometryTrianglesNV>()
{
  return VkGeometryTrianglesNV{VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV};
}
template <>
inline VkGeometryAABBNV make<VkGeometryAABBNV>()
{
  return VkGeometryAABBNV{VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV};
}
template <>
inline VkGeometryNV make<VkGeometryNV>()
{
  VkGeometryNV ret       = {VK_STRUCTURE_TYPE_GEOMETRY_NV};
  ret.geometry.triangles = {VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV};
  ret.geometry.aabbs     = {VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV};
  return ret;
}
template <>
inline VkAccelerationStructureInfoNV make<VkAccelerationStructureInfoNV>()
{
  return VkAccelerationStructureInfoNV{VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV};
}
template <>
inline VkAccelerationStructureCreateInfoNV make<VkAccelerationStructureCreateInfoNV>()
{
  VkAccelerationStructureCreateInfoNV ret = {VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV};
  ret.info                                = {VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV};
  return ret;
}
template <>
inline VkBindAccelerationStructureMemoryInfoNV make<VkBindAccelerationStructureMemoryInfoNV>()
{
  return VkBindAccelerationStructureMemoryInfoNV{VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV};
}
template <>
inline VkWriteDescriptorSetAccelerationStructureNV make<VkWriteDescriptorSetAccelerationStructureNV>()
{
  return VkWriteDescriptorSetAccelerationStructureNV{VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV};
}
template <>
inline VkAccelerationStructureMemoryRequirementsInfoNV make<VkAccelerationStructureMemoryRequirementsInfoNV>()
{
  return VkAccelerationStructureMemoryRequirementsInfoNV{VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV};
}
template <>
inline VkPhysicalDeviceRayTracingPropertiesNV make<VkPhysicalDeviceRayTracingPropertiesNV>()
{
  return VkPhysicalDeviceRayTracingPropertiesNV{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV};
}
#endif
#if VK_NV_representative_fragment_test
template <>
inline VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV make<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV>()
{
  return VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV};
}
template <>
inline VkPipelineRepresentativeFragmentTestStateCreateInfoNV make<VkPipelineRepresentativeFragmentTestStateCreateInfoNV>()
{
  return VkPipelineRepresentativeFragmentTestStateCreateInfoNV{VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV};
}
#endif
#if VK_EXT_calibrated_timestamps
template <>
inline VkCalibratedTimestampInfoEXT make<VkCalibratedTimestampInfoEXT>()
{
  return VkCalibratedTimestampInfoEXT{VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT};
}
#endif
#if VK_NV_compute_shader_derivatives
template <>
inline VkPhysicalDeviceComputeShaderDerivativesFeaturesNV make<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV>()
{
  return VkPhysicalDeviceComputeShaderDerivativesFeaturesNV{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV};
}
#endif
#if VK_NV_mesh_shader
template <>
inline VkPhysicalDeviceMeshShaderFeaturesNV make<VkPhysicalDeviceMeshShaderFeaturesNV>()
{
  return VkPhysicalDeviceMeshShaderFeaturesNV{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV};
}
template <>
inline VkPhysicalDeviceMeshShaderPropertiesNV make<VkPhysicalDeviceMeshShaderPropertiesNV>()
{
  return VkPhysicalDeviceMeshShaderPropertiesNV{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV};
}
#endif
#if VK_NV_scissor_exclusive
template <>
inline VkPipelineViewportExclusiveScissorStateCreateInfoNV make<VkPipelineViewportExclusiveScissorStateCreateInfoNV>()
{
  return VkPipelineViewportExclusiveScissorStateCreateInfoNV{VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV};
}
template <>
inline VkPhysicalDeviceExclusiveScissorFeaturesNV make<VkPhysicalDeviceExclusiveScissorFeaturesNV>()
{
  return VkPhysicalDeviceExclusiveScissorFeaturesNV{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV};
}
#endif
#if VK_EXT_pci_bus_info
template <>
inline VkPhysicalDevicePCIBusInfoPropertiesEXT make<VkPhysicalDevicePCIBusInfoPropertiesEXT>()
{
  return VkPhysicalDevicePCIBusInfoPropertiesEXT{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT};
}
#endif
#if VK_EXT_memory_budget
template <>
inline VkPhysicalDeviceMemoryBudgetPropertiesEXT make<VkPhysicalDeviceMemoryBudgetPropertiesEXT>()
{
  return VkPhysicalDeviceMemoryBudgetPropertiesEXT{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT};
}
#endif
#if VK_EXT_memory_priority
template <>
inline VkPhysicalDeviceMemoryPriorityFeaturesEXT make<VkPhysicalDeviceMemoryPriorityFeaturesEXT>()
{
  return VkPhysicalDeviceMemoryPriorityFeaturesEXT{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT};
}
template <>
inline VkMemoryPriorityAllocateInfoEXT make<VkMemoryPriorityAllocateInfoEXT>()
{
  return VkMemoryPriorityAllocateInfoEXT{VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT};
}
#endif
#if VK_NV_dedicated_allocation_image_aliasing
template <>
inline VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV make<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>()
{
  return VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV{
      VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV};
}
#endif
#if VK_EXT_buffer_device_address
template <>
inline VkPhysicalDeviceBufferAddressFeaturesEXT make<VkPhysicalDeviceBufferAddressFeaturesEXT>()
{
  return VkPhysicalDeviceBufferAddressFeaturesEXT{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT};
}
template <>
inline VkBufferDeviceAddressCreateInfoEXT make<VkBufferDeviceAddressCreateInfoEXT>()
{
  return VkBufferDeviceAddressCreateInfoEXT{VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT};
}
#endif
#if VK_EXT_validation_features
template <>
inline VkValidationFeaturesEXT make<VkValidationFeaturesEXT>()
{
  return VkValidationFeaturesEXT{VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT};
}
#endif
#if VK_NV_cooperative_matrix
template <>
inline VkCooperativeMatrixPropertiesNV make<VkCooperativeMatrixPropertiesNV>()
{
  return VkCooperativeMatrixPropertiesNV{VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV};
}
template <>
inline VkPhysicalDeviceCooperativeMatrixFeaturesNV make<VkPhysicalDeviceCooperativeMatrixFeaturesNV>()
{
  return VkPhysicalDeviceCooperativeMatrixFeaturesNV{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV};
}
template <>
inline VkPhysicalDeviceCooperativeMatrixPropertiesNV make<VkPhysicalDeviceCooperativeMatrixPropertiesNV>()
{
  return VkPhysicalDeviceCooperativeMatrixPropertiesNV{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV};
}
#endif
#if VK_NV_coverage_reduction_mode
template <>
inline VkPhysicalDeviceCoverageReductionModeFeaturesNV make<VkPhysicalDeviceCoverageReductionModeFeaturesNV>()
{
  return VkPhysicalDeviceCoverageReductionModeFeaturesNV{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV};
}
template <>
inline VkPipelineCoverageReductionStateCreateInfoNV make<VkPipelineCoverageReductionStateCreateInfoNV>()
{
  return VkPipelineCoverageReductionStateCreateInfoNV{VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV};
}
template <>
inline VkFramebufferMixedSamplesCombinationNV make<VkFramebufferMixedSamplesCombinationNV>()
{
  return VkFramebufferMixedSamplesCombinationNV{VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV};
}
#endif
#if VK_KHR_pipeline_executable_properties
template <>
inline VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR make<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR>()
{
  return VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR};
}
template <>
inline VkPipelineInfoKHR make<VkPipelineInfoKHR>()
{
  return VkPipelineInfoKHR{VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR};
}
template <>
inline VkPipelineExecutablePropertiesKHR make<VkPipelineExecutablePropertiesKHR>()
{
  return VkPipelineExecutablePropertiesKHR{VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR};
}
template <>
inline VkPipelineExecutableInfoKHR make<VkPipelineExecutableInfoKHR>()
{
  return VkPipelineExecutableInfoKHR{VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR};
}
template <>
inline VkPipelineExecutableStatisticKHR make<VkPipelineExecutableStatisticKHR>()
{
  return VkPipelineExecutableStatisticKHR{VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR};
}
template <>
inline VkPipelineExecutableInternalRepresentationKHR make<VkPipelineExecutableInternalRepresentationKHR>()
{
  return VkPipelineExecutableInternalRepresentationKHR{VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR};
}
#endif
#if VK_NV_device_generated_commands
template <>
inline VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV make<VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV>()
{
  return VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV};
}
template <>
inline VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV make<VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV>()
{
  return VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV};
}
template <>
inline VkGraphicsShaderGroupCreateInfoNV make<VkGraphicsShaderGroupCreateInfoNV>()
{
  return VkGraphicsShaderGroupCreateInfoNV{VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV};
}
template <>
inline VkGraphicsPipelineShaderGroupsCreateInfoNV make<VkGraphicsPipelineShaderGroupsCreateInfoNV>()
{
  return VkGraphicsPipelineShaderGroupsCreateInfoNV{VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV};
}
template <>
inline VkIndirectCommandsLayoutTokenNV make<VkIndirectCommandsLayoutTokenNV>()
{
  return VkIndirectCommandsLayoutTokenNV{VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV};
}
template <>
inline VkIndirectCommandsLayoutCreateInfoNV make<VkIndirectCommandsLayoutCreateInfoNV>()
{
  return VkIndirectCommandsLayoutCreateInfoNV{VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV};
}
template <>
inline VkGeneratedCommandsInfoNV make<VkGeneratedCommandsInfoNV>()
{
  return VkGeneratedCommandsInfoNV{VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV};
}
template <>
inline VkGeneratedCommandsMemoryRequirementsInfoNV make<VkGeneratedCommandsMemoryRequirementsInfoNV>()
{
  return VkGeneratedCommandsMemoryRequirementsInfoNV{VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV};
}
#endif
#if VK_EXT_texel_buffer_alignment
template <>
inline VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT make<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT>()
{
  return VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT};
}
template <>
inline VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT make<VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT>()
{
  return VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT{VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT};
}
#endif
}  // namespace nvvk
